package com.otv.managed.bean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import org.springframework.dao.DataAccessException;
import com.otv.model.Alojamiento;
import com.otv.model.Arriendo;
import com.otv.model.Encargado;
import com.otv.model.Privilegio;
import com.otv.model.Servicio;
import com.otv.model.TipoAlojamiento;
import com.otv.tipoalojamiento.service.ITipoAlojamientoService;
import com.otv.alojamiento.service.IAlojamientoService;
import com.otv.encargado.service.IEncargadoService;


@ManagedBean(name="alojamientoMB")
@RequestScoped
public class AlojamientoManagedBean implements Serializable {
	
	private static final long serialVersionUID = 1L;
	private static final String SUCCESS = "success";
	private static final String ERROR   = "error";
	
	//Spring Service is injected...
	@ManagedProperty(value="#{AlojamientoService}")
	IAlojamientoService alojamientoService;
	@ManagedProperty(value="#{EncargadoService}")
	IEncargadoService encargadoService;
	@ManagedProperty(value="#{TipoAlojamientoService}")
	ITipoAlojamientoService tipoAlojamientoService;
	
	List<Alojamiento> alojamientoList;
	
	private int id;
	private int tipoAlojamiento;
	private int encargado;
//	private TipoAlojamiento tipoAlojamiento;
//	private Encargado encargado;
	private String nombre;
	private String direccion;
	private boolean disponible;
	private Double valor;
	
	private List<TipoAlojamiento> tipoAlojamientoList;
	private List<Encargado> encargadoList;

	private List<Servicio> servicioList;
	private List<Privilegio> privilegioList;
	private List<Arriendo> arriendoList;
	

	
//	private TipoAlojamiento a () {
//		TipoAlojamiento a = new TipoAlojamiento();
//		a.setId(1);
//		return a;
//	}
//	
//	private Encargado b () {
//		Encargado b = new Encargado ();
//		b.setId(1);
//		return b;
//	}
	

	public String addAlojamiento () {
		try {
			Alojamiento alojamiento = new Alojamiento();
			alojamiento.setId(getId());
			alojamiento.setTipoAlojamiento(getTipoAlojamientoService().getTipoAlojamientoById(getTipoAlojamiento())); 
//			alojamiento.setTipoAlojamiento(this.a());
			
			alojamiento.setEncargado(getEncargadoService().getEncargadoById(getEncargado())); 
//			alojamiento.setEncargado(this.b());
			
			alojamiento.setNombre(getNombre());
			alojamiento.setDireccion(getDireccion());
			alojamiento.setDisponible(isDisponible());
			alojamiento.setValor(getValor());
			
			getAlojamientoService().addAlojamiento(alojamiento);

			return SUCCESS;
		} catch (DataAccessException e) {
			e.printStackTrace();
		} 	
		
		return ERROR;
	}
	
	/**
	 * Reset Fields
	 * 
	 */
	public void reset() {
		this.setId(0);
		this.setDireccion("");
		this.setDisponible(true);
		this.setEncargado(0);
		this.setNombre("");
		this.setTipoAlojamiento(0);
		this.setValor(0.0);
	}

	
	
	public List<TipoAlojamiento> getTipoAlojamientoList() {
		return getTipoAlojamientoService().getTiposAlojamientos();
	}

	public void setTipoAlojamientoList(List<TipoAlojamiento> tipoAlojamientoList) {
		this.tipoAlojamientoList = tipoAlojamientoList;
	}

	public List<Encargado> getEncargadoList() {
		return getEncargadoService().getEncargados();
	}

	public void setEncargadoList(List<Encargado> encargadoList) {
		this.encargadoList = encargadoList;
	}

	public IEncargadoService getEncargadoService() {
		return encargadoService;
	}

	public void setEncargadoService(IEncargadoService encargadoService) {
		this.encargadoService = encargadoService;
	}

	public ITipoAlojamientoService getTipoAlojamientoService() {
		return tipoAlojamientoService;
	}

	public void setTipoAlojamientoService(
			ITipoAlojamientoService tipoAlojamientoService) {
		this.tipoAlojamientoService = tipoAlojamientoService;
	}

	public IAlojamientoService getAlojamientoService() {
		return alojamientoService;
	}

	public void setAlojamientoService(IAlojamientoService alojamientoService) {
		this.alojamientoService = alojamientoService;
	}

	public List<Alojamiento> getAlojamientoList() {
		this.alojamientoList =  new ArrayList<Alojamiento>();
		this.alojamientoList.addAll(this.getAlojamientoService().getAlojamientos());
		return alojamientoList;
	}

	public void setAlojamientoList(List<Alojamiento> alojamientoList) {
		this.alojamientoList = alojamientoList;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}


	public int getTipoAlojamiento() {
		return tipoAlojamiento;
	}

	public void setTipoAlojamiento(int tipoAlojamiento) {
		this.tipoAlojamiento = tipoAlojamiento;
	}

	public int getEncargado() {
		return encargado;
	}

	public void setEncargado(int encargado) {
		this.encargado = encargado;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getDireccion() {
		return direccion;
	}

	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}

	public boolean isDisponible() {
		return disponible;
	}

	public void setDisponible(boolean disponible) {
		this.disponible = disponible;
	}

	public Double getValor() {
		return valor;
	}

	public void setValor(Double valor) {
		this.valor = valor;
	}

	public List<Servicio> getServicioList() {
		return servicioList;
	}

	public void setServicioList(List<Servicio> servicioList) {
		this.servicioList = servicioList;
	}

	public List<Privilegio> getPrivilegioList() {
		return privilegioList;
	}

	public void setPrivilegioList(List<Privilegio> privilegioList) {
		this.privilegioList = privilegioList;
	}

	public List<Arriendo> getArriendoList() {
		return arriendoList;
	}

	public void setArriendoList(List<Arriendo> arriendoList) {
		this.arriendoList = arriendoList;
	}
}